<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
        在开启严格模式下的语法和行为改变
            必须用 var 声明变量，不允许使用未声明的变量
            禁止自定义的函数中的 this 指向 window
            创建 eval 作用域
            对象不能有重名的属性（Chrome 已经修复了这个 Bug，IE 还会出现）
            函数不能有重复的形参
            新增一些保留字, 如: implements interface private protected public
        */

        //1. 必须用 var 声明变量，不允许使用未声明的变量
        // "use strict";
        // b = 100;
        // console.log(b);

        //2. 禁止自定义的函数中的 this 指向 window
        // "use strict";
        // function demo(){
        //     // 默认如下调用函数方式，this执行window对象
        //     // 若开启严格模式下，this就是undefined
        //     console.log(this);
        // }
        // demo();

        //3. 创建 eval 作用域
        //eval() -- 此函数会将参数当成js程序运行
        // var str = "var m = 100; console.log(m);";
        // eval(str); // 将str字串当js程序执行

        // var data = "{name:'zhangsan',age:20,sex:'man'}";
        // eval("var ob = "+data);
        // console.log(ob); // {name: 'zhangsan', age: 20, sex: 'man'}
        // console.log(ob.name); // zhangsan
        // console.log(ob.age);  // 20
        
        // "use strict";
        // var str = "var m = 100; console.log(m);";
        // eval(str); // 将str字串当js程序执行
        // // 开启严格模式会导致eval中的变量为局部变量
        // console.log(m);

        //4. 对象不能有重名的属性（Chrome 已经修复了这个 Bug，IE 还会出现）
        // "use strict";
        // var  ob = {
        //     m:10,
        //     m:20
        // }
        // console.log(ob);

        //5. 函数不能有重复的形参
        // "use strict";
        // function demo(a,a){
        //     console.log(a);
        // }
        // demo(10,20);
        
        //6. 新增一些保留字, 如: implements interface private protected public
        "use strict";
        // 开启严格模式时，private为js的保留关键字，不能用于其它使用
        var private = "Hello";
        console.log(private);
    </script>
</body>
</html>